package com.atguigu.gmall.product.client;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.model.product.BaseCategoryView;
import com.atguigu.gmall.model.product.SkuInfo;
import com.atguigu.gmall.model.product.SpuSaleAttr;
import com.atguigu.gmall.product.client.impl.ProductDegradeFeignClient;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 远程调用 商品微服务的Feign接口
 * @author aaronmegs
 * @create 2020-02-23 7:27 下午
 */
@FeignClient(name = "service-product", fallback = ProductDegradeFeignClient.class)
public interface ProductFeignClient {

    //获取SkuInfo（SkuImage集合）  inner 内部 表达意思：对外暴露的此请求 是内部微服务之间远程调用 不接收网关路由
    @GetMapping("/api/product/inner/getSkuInfo/{skuId}")
    public SkuInfo getSkuInfo(@PathVariable(name = "skuId") Long skuId);

    // 根据三级分类ID查询分类视图
    @GetMapping("/api/product/inner/getCategoryView/{category3Id}")
    public BaseCategoryView getCategoryView(@PathVariable("category3Id") Long category3Id);

    // 查询销售属性及属性值 及选中当前商品
    @GetMapping("/api/product/inner/getSpuSaleAttrListCheckBySku/{skuId}/{spuId}")
    public List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(
            @PathVariable(name = "skuId") Long skuId,
            @PathVariable(name = "spuId") Long spuId
    );

    // 点击其他销售属性值的组合，跳转到另外的SKU页面
    @GetMapping("/api/product/inner/getSkuValueIdsMap/{spuId}")
    public Map getSkuValueIdsMap(@PathVariable(name = "spuId") Long spuId);

    // 单独获取库存的价格
    @GetMapping("/api/product/inner/getSkuPrice/{skuId}")
    public BigDecimal getSkuPrice(@PathVariable("skuId") Long skuId);

    // 为了首页加载一二三级商品分类
    @GetMapping("/api/product/getBaseCategoryList")
    public Result getBaseCategoryList();
}
